# -*- coding: utf-8 -*-
'''
     @Author : LiWenqian
     @File : work.py
     @Project: scpythonProject
     @CreateTime : 2022/7/13 19:06:57
'''
# lst = ['a', '1', 'bb', '234', '', '9']
# 使用reduce 取出lst里的数字 并且转换成整型 ---》12349
from functools import reduce

lst = ['a', '1', 'bb', '234', '', '9']
def func(x,y):
    return x + y
print(int(reduce(func, list(filter(str.isdigit, lst)))))
# 12349

# 有以下列表：list1=[7, -8, 5, 4, 0, -2, -5]
# 正数在前负数在后
# 正数从小到大
# 负数从大到小
list1=[7, -8, 5, 4, 0, -2, -5]
def func(lst):
    # 将列表中的正数选出并按从小到大排序
    pos_num = sorted(list(filter(lambda x: x > 0, lst)))
    # 将列表中的负数选出按从大到小排序
    reg_num = sorted(list(filter(lambda x: x < 0, lst)), reverse=True)
    if 0 in lst:
        pos_num.append(0)
        pos_num.extend(reg_num)
        return pos_num
    else:
        pos_num.extend(reg_num)
        return pos_num

print(func(list1))
# [4, 5, 7, 0, -2, -5, -8]

# 这是一个字符串排序，排序规则：小写<大写<奇数<偶数
# s = 'asdf234GDSdsf23'
# 排序:小写-大写-奇数-偶数
# 原理：先比较元组的第一个值，FALSE
s = 'asdf234GDSdsf23'

def new_sort(str):
    """
    判断每一个字符是大小写还是奇偶数，根据排序规则可以给不同类型的字符返回一个元组
    因为字符排在前面，数字排后面，所以如果是字符就给元组的第一个值赋为False,数字就给True
    小写字母在前，大写字母在后，所以如果字符是小写，元组中的第二值就为False,大写就为True
    奇数在前偶数在后，如果是奇数，元组中的第二值就为False,偶数就为True
    :param str:
    :return:
    """
    # 判断是字符是字母还是数字
    if str.isdigit():
        # 判断是否为偶数
        if int(str) % 2 == 0:
            return (True, True, str)
        else:
            return (True, False, str)
    else:
        # 判断是否为大写
        if str.isupper():
            return (False, True, str)
        else:
            return (False, False, str)

print(''.join(sorted(s, key=new_sort)))
# addffssDGS33224
